//
// Created by xili on 2024/8/27 15:33.
// GO BIG OR GO HOME.
//
#include "leetcode.h"

class Solution {
public:
    bool canBeIncreasing(vector<int> &nums) {
        //1.当遍历到的元素比栈顶元素小，并且下一个元素也比栈顶元素小，同时当前元素要比栈顶元素的下一个元素大，那么把栈顶元素弹出
        //2.当遍历到的元素比栈顶元素小，并且不满足条件一，那么当前遍历的元素略过
        //经过上述两个过程的元素flag应该设置为false，代表这次错误的机会已经用过了，如果再出现不符合的情况就要返回false了
        stack<int> sta;
        int n = nums.size();
        bool flag = true;
        int last = 0;
        for (int i = 0; i < n; i++) {
            if (!sta.empty() && nums[i] <= sta.top()) {
                if (!flag) {
                    return false;
                }
                if (i + 1 < n && nums[i + 1] <= sta.top() && nums[i] > last) {
                    sta.pop();
                    sta.push(nums[i]);
                    flag = false;
                } else if (i + 1 < n) {
                    flag = false;
                }
            } else {
                last = sta.empty() ? 0 : sta.top();
                sta.push(nums[i]);
            }
        }
        return true;
    }
};